package org.upo.eps.it.phama.bean;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;

@Entity
@Table(name="far_producto", catalog="phama")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "producto")
public class Producto  implements Serializable {

     @Id 
     @GeneratedValue(strategy=IDENTITY)
     @Column(name="ID_PRODUCTO", unique=true, nullable=false)
     private Integer idProducto;
     
     @ManyToOne(fetch=FetchType.EAGER)
     @JoinColumn(name="ID_ALMACEN")
     private Almacen almacen;
     
     @ManyToOne(fetch=FetchType.EAGER)
     @JoinColumn(name="ID_PROVEEDOR", nullable=false)
     private Proveedor proveedor;
     
     @Column(name="NOMBRE", nullable=false)
     private String nombre;
     
     @Column(name="DESCRIPCION", nullable=false)
     private String descripcion;
     
     @Column(name="COSTE", nullable=false, precision=22, scale=0)     
     private double coste;
     
     @Column(name="PRECIO", nullable=false, precision=22, scale=0)     
     private double precio;
     
     @Column(name="IVA", nullable=false, precision=22, scale=0)     
     private double iva;
     
     @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="producto")
     @XmlTransient
     private Set<DetallePedPro> misDetallesPedPro = new HashSet<>(0);
     
     @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="producto")
     @XmlTransient
     private Set<DetallePedCli> misDetallesPedCli = new HashSet<>(0);

     //<editor-fold defaultstate="collapsed" desc="constructors">
     public Producto() {
     }
     
     public Producto(String nombre, String descripcion, double coste, double precio, double iva) {
         this.nombre = nombre;
         this.descripcion = descripcion;
         this.coste = coste;
         this.precio = precio;
         this.iva = iva;
     }
     
     public Producto(Almacen almacen, Proveedor proveedor, String nombre, String descripcion, double coste, double precio, double iva) {
         this.almacen = almacen;
         this.proveedor = proveedor;
         this.nombre = nombre;
         this.descripcion = descripcion;
         this.coste = coste;
         this.precio = precio;
         this.iva = iva;
     }
     
     public Producto(Almacen almacen, Proveedor proveedor, String nombre, String descripcion, double coste, double precio, double iva, Set<DetallePedPro> misDetallesPedPro, Set<DetallePedCli> misDetallesPedCli) {
         this.almacen = almacen;
         this.proveedor = proveedor;
         this.nombre = nombre;
         this.descripcion = descripcion;
         this.coste = coste;
         this.precio = precio;
         this.iva = iva;
         this.misDetallesPedPro = misDetallesPedPro;
         this.misDetallesPedCli = misDetallesPedCli;
     }
     //</editor-fold>
   
     //<editor-fold defaultstate="collapsed" desc="getters & setters">
     public Integer getIdProducto() {
         return this.idProducto;
     }
     
     public void setIdProducto(Integer idProducto) {
         this.idProducto = idProducto;
     }
     
     public Almacen getAlmacen() {
         return this.almacen;
     }
     
     public void setAlmacen(Almacen almacen) {
         this.almacen = almacen;
     }
     
     public Proveedor getProveedor() {
         return this.proveedor;
     }
     
     public void setProveedor(Proveedor proveedor) {
         this.proveedor = proveedor;
     }
     
     public String getNombre() {
         return this.nombre;
     }
     
     public void setNombre(String nombre) {
         this.nombre = nombre;
     }
     
     public String getDescripcion() {
         return this.descripcion;
     }
     
     public void setDescripcion(String descripcion) {
         this.descripcion = descripcion;
     }
     
     public double getCoste() {
         return this.coste;
     }
     
     public void setCoste(double coste) {
         this.coste = coste;
     }
     
     public double getPrecio() {
         return this.precio;
     }
     
     public void setPrecio(double precio) {
         this.precio = precio;
     }
     
     public double getIva() {
         return this.iva;
     }
     
     public void setIva(double iva) {
         this.iva = iva;
     }
     
     public Set<DetallePedPro> getMisDetallesPedPro() {
         return this.misDetallesPedPro;
     }
     
     public void setMisDetallePedPros(Set<DetallePedPro> misDetallesPedPro) {
         this.misDetallesPedPro = misDetallesPedPro;
     }
     
     public Set<DetallePedCli> getMisDetallesPedCli() {
         return this.misDetallesPedCli;
     }
     
     public void setMisDetallePedClis(Set<DetallePedCli> misDetallesPedCli) {
         this.misDetallesPedCli = misDetallesPedCli;
     }
     //</editor-fold>

     @Override
     public String toString(){
         return this.nombre;
     }
     
     public String getFullname(){
         return this.toString();
     }
}


